package net.suplementos.servico;

import java.util.List;

import javax.ejb.Remote;

import net.suplementos.exception.CampoObrigatorioException;
import net.suplementos.exception.RegistroInexistenteException;
import net.suplementos.exception.RegistroJaExistenteException;
import net.suplementos.pojo.Categoria;
import net.suplementos.pojo.FormaPagamento;
import net.suplementos.pojo.Marca;
import net.suplementos.pojo.ParametroSistema;
import net.suplementos.pojo.Perfil;
import net.suplementos.pojo.Produto;
import net.suplementos.pojo.Usuario;
import net.suplementos.pojo.UsuarioPerfil;

@Remote
public interface CadastroServico {

    List<Categoria> consultar(Categoria categoria) throws CampoObrigatorioException;

    List<Categoria> listarTodasCategoriasAtivas();
    
    Categoria getCategoria(Integer id);

    void alterar(Categoria categoria) throws CampoObrigatorioException, RegistroJaExistenteException, RegistroInexistenteException;

    void salvar(Categoria categoria) throws CampoObrigatorioException, RegistroJaExistenteException;

    List<Marca> consultar(Marca marca) throws CampoObrigatorioException;

    List<Marca> listarTodasMarcasAtivas();
    
    Marca getMarca(Integer id);

    void alterar(Marca marca) throws CampoObrigatorioException, RegistroJaExistenteException, RegistroInexistenteException;

    void salvar(Marca marca) throws CampoObrigatorioException, RegistroJaExistenteException;

    List<FormaPagamento> listarTodasFormasPagamento();

    List<FormaPagamento> listarTodasFormasPagamentoAtivas();

    FormaPagamento getFormaPagamento(Integer id);

    void alterar(FormaPagamento formaPagamento) throws CampoObrigatorioException, RegistroJaExistenteException, RegistroInexistenteException;

    void salvar(FormaPagamento formaPagamento) throws CampoObrigatorioException, RegistroJaExistenteException;

    List<ParametroSistema> listarTodosParametrosSistema();

    ParametroSistema getParametroSistema(String id);

    void alterar(String codigo, String valor) throws CampoObrigatorioException, RegistroInexistenteException;

    List<Produto> consultar(Produto produto) throws CampoObrigatorioException;

    List<Produto> listarTodosProdutosAtivos();

    Produto getProduto(Integer id);

    void alterar(Produto produto) throws CampoObrigatorioException, RegistroJaExistenteException, RegistroInexistenteException;

    void salvar(Produto produto) throws CampoObrigatorioException;

    List<Usuario> consultar(Usuario usuario) throws CampoObrigatorioException;

    Usuario getUsuario(Integer id);

    void alterar(Usuario usuario) throws CampoObrigatorioException, RegistroJaExistenteException, RegistroInexistenteException;

    void salvar(Usuario usuario) throws CampoObrigatorioException, RegistroJaExistenteException;

    List<UsuarioPerfil> listarTodosPerfisUsuario(Usuario usuario) throws CampoObrigatorioException;

    List<UsuarioPerfil> listarTodosPerfis();

    void desassociarUsuarioPerfil(Usuario usuario, Perfil perfil, Usuario usadoAlteracao)
            throws CampoObrigatorioException, RegistroInexistenteException;

    void associarUsuarioPerfil(Usuario usuario, Perfil perfil, Usuario usadoAlteracao)
            throws CampoObrigatorioException, RegistroJaExistenteException;
}
